import getRequestConfigDescrible from '../../utils/request-config-desc';
import fieldTypes from '../../utils/field-types-desc';

const fieldType = fieldTypes.find(({ code }) => code === 'cascader') || {};

export default {
    attributes: [
        {
            params: 'v-model',
            des: '绑定值',
            type: fieldType.valueType,
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'props',
            des: '表单元素配置; 详细配置请查看下方【props 配置项】',
            type: 'Object',
            values: '-',
            defaultVal: '-',
            details: [
                {
                    title: '配置项【props】',
                    configList: [
                        {
                            params: 'type',
                            des: `表单项控件的类型(此控件的 type 固定为 "${fieldType.code}")`,
                            type: 'String',
                            values: '-',
                            defaultVal: '-',
                        },
                        {
                            params: 'value',
                            des: '表单项控件的默认值，若绑定值为空，将获取该值作为初始值',
                            type: fieldType.valueType,
                            values: '-',
                            defaultVal: '-',
                        },
                        {
                            params: 'size',
                            des: '尺寸大小',
                            type: 'String',
                            values: '"large" | "default" | "small"',
                            defaultVal: '"default"',
                        },
                        {
                            params: 'disabled',
                            des: '是否禁用',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'false',
                        },
                        {
                            params: 'placeholder',
                            des: '输入框占位提示',
                            type: 'String',
                            values: '-',
                            defaultVal: '"请选择"',
                        },
                        {
                            params: 'multiple',
                            des: '是否支持多选',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'false',
                        },
                        {
                            params: 'options',
                            des: '控件选项的配置数据；选项选中时，组件内默认从选项数据内取 "value" 字段对应的值作为绑定值，取 "label" 字段对应的值作为展示；如果数据内不存在这两个字段名，则需要使用 optionProps 属性来指定',
                            type: 'Array',
                            values: '-',
                            defaultVal: '-',
                        },
                        {
                            params: 'optionProps',
                            des: '配置选项',
                            type: 'Object',
                            values: '-',
                            defaultVal: '请查阅下方 optionProps 配置项说明',
                            details: [
                                {
                                    title: '配置项【optionProps】',
                                    configList: [
                                        {
                                            params: 'label',
                                            des: '指定选项数据的展示值所对应的字段编码',
                                            type: 'String',
                                            values: '-',
                                            defaultVal: '"label"',
                                        },
                                        {
                                            params: 'value',
                                            des: '指定选项数据的唯一键所对应的字段编码',
                                            type: 'String',
                                            values: '-',
                                            defaultVal: '"value"',
                                        },
                                        {
                                            params: 'children',
                                            des: '指定选项数据的子选项所对应的字段编码',
                                            type: 'String',
                                            values: '-',
                                            defaultVal: '"children"',
                                        },
                                        {
                                            params: 'disabled',
                                            des: '指定选项数据的禁用状态所对应的字段编码',
                                            type: 'String',
                                            values: '-',
                                            defaultVal: '"disabled"',
                                        },
                                        {
                                            params: 'leaf',
                                            des: '指定选项数据的叶子节点的标志位所对应的字段编码',
                                            type: 'String',
                                            values: '-',
                                            defaultVal: '"leaf"',
                                        },
                                        {
                                            params: 'emitPath',
                                            des: '在选中节点改变时，是否返回由该节点所在的各级菜单的值所组成的数组，若设置 false，则只返回该节点的值',
                                            type: 'Boolean',
                                            values: 'true | false',
                                            defaultVal: 'true',
                                        },
                                        {
                                            params: 'checkStrictly',
                                            des: '是否严格的遵守父子节点不互相关联',
                                            type: 'Boolean',
                                            values: 'true | false',
                                            defaultVal: 'false',
                                        },
                                        {
                                            params: 'lazy',
                                            des: '是否动态加载子节点，需与 lazyLoad 方法结合使用',
                                            type: 'Boolean',
                                            values: 'true | false',
                                            defaultVal: 'false',
                                        },
                                        {
                                            params: 'lazyLoad',
                                            des: '加载动态数据的方法，需要将新的子数据通过 resolve 方法返回， 仅在 lazy 为 true 时有效',
                                            type: 'Function(node, resolve)',
                                            values: '-',
                                            defaultVal: '-',
                                        },
                                        {
                                            params: 'expandTrigger',
                                            des: '次级菜单的展开方式',
                                            type: 'Boolean',
                                            values: '"click" | "hover"',
                                            defaultVal: '"click"',
                                        },
                                        {
                                            params: 'hoverThreshold',
                                            des: 'hover 时展开菜单的灵敏度阈值',
                                            type: 'Number',
                                            values: '-',
                                            defaultVal: '500',
                                        },
                                    ],
                                },
                            ],
                        },
                        {
                            params: 'requestConfig',
                            des: '通过接口请求选项数据的配置；详情请查阅下方说明',
                            type: 'Object',
                            values: '-',
                            defaultVal: '-',
                            details: [
                                {
                                    title: '配置项【requestConfig】',
                                    describes: [
                                        '除以下字段外，requestConfig 还支持传入axios的所有可配置参数，详细配置说明请查阅 https://github.com/axios/axios#request-config',
                                    ],
                                    configList: getRequestConfigDescrible('item'),
                                },
                            ],
                        },
                        {
                            params: 'showAllLevels',
                            des: '输入框中是否显示选中值的完整路径',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'true',
                        },
                        {
                            params: 'collapseTags',
                            des: '多选模式下是否在展示时折叠Tag',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'false',
                        },
                        {
                            params: 'collapseTagsTooltip',
                            des: '当鼠标悬停于折叠标签的文本时，是否显示所有选中的标签。 要使用此属性，collapse-tags属性必须设定为 true',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'false',
                        },
                        {
                            params: 'separator',
                            des: '用于分隔选项的字符',
                            type: 'String',
                            values: '-',
                            defaultVal: '"/"',
                        },
                        {
                            params: 'filterable',
                            des: '是否支持筛选',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'false',
                        },
                        {
                            params: 'filterMethod',
                            des: '自定义搜索逻辑，第一个参数是node，第二个参数是keyword，返回的布尔值表示是否保留该选项',
                            type: 'Function(node, keyword)',
                            values: '-',
                            defaultVal: '-',
                        },
                        {
                            params: 'debounce',
                            des: '搜索关键词正在输入时的去抖延迟，单位为毫秒',
                            type: 'Number',
                            values: '-',
                            defaultVal: '300',
                        },
                        {
                            params: 'clearable',
                            des: '是否展示清空图标',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'true',
                        },
                        {
                            params: 'popperClass',
                            des: '选择器下拉菜单的自定义类名',
                            type: 'String',
                            values: '-',
                            defaultVal: '-',
                        },
                        {
                            params: 'teleported',
                            des: '该下拉菜单是否使用teleport插入body元素',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'true',
                        },
                        {
                            params: 'tagType',
                            des: '标签类型',
                            type: 'String',
                            values: '"success" | "info" | "warning" | "danger"',
                            defaultVal: '"info"',
                        },
                        {
                            params: 'unit',
                            des: '控件尾部的单位文案配置',
                            type: 'String',
                            values: '-',
                            defaultVal: '-',
                        },
                        {
                            params: 'validateEvent',
                            des: '输入时是否触发表单的校验',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'true',
                        },
                    ],
                },
            ],
        },
    ],
    events: [
        {
            name: 'change',
            des: '输入框失焦后值内容修改触发的事件',
            params: '({ value, label, data }, props)',
        },
        {
            name: 'focus',
            des: '输入框聚焦事件',
            params: '(value, props, event)',
        },
        {
            name: 'blur',
            des: '输入框失焦事件',
            params: '(value, props, event)',
        },
        {
            name: 'visible-change',
            des: '下拉框出现/隐藏时触发',
            params: '(value, props, isShow)',
        },
        {
            name: 'remove-tag',
            des: '多选模式下移除tag时触发，tag 表示移除的tag值',
            params: '(value, props, tag)',
        },
        {
            name: 'clear',
            des: '点击清空图标，清空输入框的值后抛出的事件',
            params: '(value, props)',
        },
    ],
    slots: [],
    refs: [],
};
